iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

今天來點開胃菜提供練習~ 還有提供物件導向(OOP)的範例!

開胃菜

Bubble sort

  • 通過反複比較相鄰的元素使其交換,使最大/最小的元素移到列表的一端。
  • 重複進行,直到排序完成。
def bubble_sort(lst):
 for i in range(len(lst) - 1):
    for j in range(len(lst) - 1 - i):
        if lst[j] > lst[j + 1]:
            lst[j], lst[j + 1] = lst[j + 1], lst[j]
 return lst
print(bubble_sort([5, 3, 2, 1, 4])) # Output: [1, 2, 3, 4, 5]

Insertion sort

  • 分成已排序和未排序。
  • 每次迭代中,從未排序的部分取出一個元素,並將其插入已排序的部分的適當位置。
def insertion_sort(lst):
 for i in range(1, len(lst)):
 j = i
 while j > 0 and lst[j] < lst[j - 1]:
 lst[j], lst[j - 1] = lst[j - 1], lst[j]
 j -= 1
 return lst
print(insertion_sort([5, 3, 2, 1, 4])) # Output: [1, 2, 3, 4, 5]

Merge Sort

  • 使用分治策略,將列表分成較小的子列表。
  • 然後將這些子列表合併以獲得最終排序結果。
  • 時間複雜度是O(n log n),效率較高。
def merge_sort(lst):
 if len(lst) <= 1:
 return lst
 mid = len(lst) // 2
 left = merge_sort(lst[:mid])
 right = merge_sort(lst[mid:])
 return merge(left, right)
def merge(left, right):
 result = []
 i = 0
 j = 0
 while i < len(left) and j < len(right):
 if left[i] < right[j]:
 result.append(left[i])
 i += 1
 else:
 result.append(right[j])
 j += 1
 result.extend(left[i:])
 result.extend(right[j:])
 return result
print(merge_sort([5, 3, 2, 1, 4])) # Output: [1, 2, 3, 4, 5]

Python Object-oriented programming (物件導向 OOP)

class

  • 定義對象的模板,包括屬性(變數)和方法(函式)。
  • 描述對象的特性和行為。
  • 就像是一張設計圖

object

  • 像是我寫了一張生日卡片,這張生日卡片是一個object,生日卡片上有收件人、內容、簽名等等屬性,還有發送卡片的動作
class BirthdayCard:
    def __init__(self, recipient, content, sender):
        self.recipient = recipient  # 收件人
        self.content = content      # 卡片內容
        self.sender = sender        # 寄件人

    def send_card(self):
        print(f"生日卡片已寄給 {self.recipient},內容:{self.content}")
# 創建一張生日卡片物件
birthday_card = BirthdayCard("五條悟", "祝你生日快樂!", "虎杖")

# 發送生日卡片
birthday_card.send_card()

# 生日卡片已寄給 五條悟,內容:祝你生日快樂!

Inheritance

  • 允許一個類別(子類別)繼承另一個類別(父類別)的屬性和方法。
  • 繼承促進了程式碼重複利用和構建層次結構。

Encapsulation

  • 將類別的屬性和方法隱藏在內部,只允許通過公開的接口來訪問它們。
  • 提高了程式的安全性和可維護性。

實作範例一

class MyClass:
    def __init__(self, value):
        self.value = value
    def method(self):
        print(self.value)
# Create an instance of MyClass
obj = MyClass(10)
# Call the method
obj.method() # Output: 10

實作範例二

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed
    def bark(self):
        print("Woof!")
# Create a new dog object
dog = Dog("Fido", "Labrador")
# Access the object's data
print(dog.name) # Output: "Fido"
print(dog.breed) # Output: "Labrador"
# Call the object's method
dog.bark() # Output: "Woof!"
            
            
#Fido
#Labrador
#Woof!

實作範例三

class ClassA:
    def __init__(self, value):
        self.value = value
    def method_a(self):
        print("Method A called")

class ClassB:
    def __init__(self):
        self.obj_a = ClassA(10)
    def method_b(self):
        print("Method B called")
        print(self.obj_a.value) # Access attribute of ClassA
        self.obj_a.method_a() # Call method of ClassA

# Create an instance of ClassB
obj_b = ClassB()
# Call method of ClassB
obj_b.method_b()

# Method B called
# 10
# Method A called

上一篇
[DAY5] Python基礎程式入門 (四)
下一篇
[DAY7] Python基礎程式進階 (二)
系列文
關於我從基礎程設轉職到人工智慧入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言